package org.blog.common;

import lombok.Getter;
import lombok.Setter;
import org.blog.exception.BaseErrorEnum;

/**
 * 响应结果类
 */
@Getter
@Setter
public class ResultVO {
    /**
     * 响应状态码
     */
    private String code;

    /**
     * 响应信息
     */
    private String message;

    /**
     * 响应数据
     */
    private Object data;

    /**
     * 总数，适合分页场景
     */
    private Long total;

    public ResultVO() {

    }

    public ResultVO(String code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public ResultVO(String code, String message, Object data, Long total) {
        this.code = code;
        this.message = message;
        this.data = data;
        this.total = total;
    }

    /**
     * 请求成功
     * @param data 返回数据
     * @return
     */
    public static ResultVO success(Object data) {
        return new ResultVO(BaseErrorEnum.SUCCESS.getCode(), BaseErrorEnum.SUCCESS.getMessage(),data);
    }

    /**
     * 请求成功，带分页总数
     * @param code
     * @param message
     * @param data
     * @param total
     * @return
     */
    public static ResultVO success(String code, String message, Object data,  Long total) {
        return new ResultVO(code, message, data, total);
    }

    /**
     * 请求失败
     * @param baseErrorEnum
     * @return
     */
    public static ResultVO fail(BaseErrorEnum baseErrorEnum) {
        return new ResultVO(baseErrorEnum.getCode(), baseErrorEnum.getMessage(), null);
    }

    /**
     * 请求失败（提供给GlobalExceptionHandler类使用）
     * @param code
     * @param message
     * @return
     */
    public static ResultVO fail(String code, String message) {
        return new ResultVO(code,message,null);
    }

    /**
     * 返回错误信息（提供给GlobalExceptionHandler类使用）
     * @param baseErrorEnum
     * @return
     */
    public static ResultVO returnError(BaseErrorEnum baseErrorEnum) {
        return new ResultVO(baseErrorEnum.getCode(), baseErrorEnum.getMessage(), null);
    }

    /**
     * 返回错误信息（提供给GlobalExceptionHandler类使用）
     * @param code
     * @param message
     * @return
     */
    public static ResultVO returnError(String code, String message) {
        return new ResultVO(code,message,null);
    }
}